package com.mnsq.common.bean.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 缓存注解
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoCache {
    /**
     * 缓存时间类型，默认分钟
     *
     * @return
     */
    CacheType cacheType() default CacheType.MINS;

    /**
     * 缓存时间是否设置固定值，false时，随机时间，时间单位不变
     *
     * @return
     */
    boolean fixedValue() default true;

    /**
     * 缓存时间值，fixedValue为true时生效
     *
     * @return
     */
    long value() default 1L;

    /**
     * 作为缓存key计算的属性
     *
     * @return
     */
    String[] properties() default "";

    /**
     * 是否续约，默认否
     *
     * @return
     */
    boolean renew() default false;

    /**
     * 缓存的对象
     * @return
     */
    Class cls();

    /**
     * 缓存时排除的属性
     *
     * @return
     */
    String[] exceptFields() default "";

    /**
     * 缓存key的前缀
     *
     * @return
     */
    String prefix() default "";

    enum CacheType {
        // 秒
        SECS,
        // 分
        MINS,
        // 时
        HOURS,
        // 天
        DAYS,
        // 月
        MONTHS,
        // 年
        YEARS;
    }
}
